const moment = require('moment')
const colors = require('colors')
const isDevEnv = require('./config').env === 'dev'

/**
 * trace : 一些更详细的跟踪信息
 * debug : 调试信息，业务处理进行状态，当前的变量值等
 * info  : 有必要的事件信息记录 【用于线上判断】
 * warn  : 警告信息，如程序调用了一个即将作废的接口，接口的不当使用，运行状态不是期望的但仍可继续处理等 【调试打印】
 * error : 运行期错误日志记录，应该有专门的error日志文件 【打印】
 * fatal : 影响服务器正常运行的记录，并通知运维人员 【通知】
 */

colors.setTheme({
	info  : 'green',
	warn  : 'yellow',
	data  : 'white',
	debug : 'blue',
	error : 'red',
	fatal : 'bgRed'
})

class logger {

	constructor({ module }) {
		console.log(`日志等级 :${isDevEnv
			? '开发'
			: '生产'}`)

		this.moduleName = module
	}

	formatMessage(message) {
		return typeof (message) === 'string'
			? message
			: Object.prototype.toString.call(message) === '[object Error]'
				? `JAVASCRIPT.${message.name}.${message.message}`
				: JSON.stringify(message)
	}

	timer() {

		return isDevEnv
			? `${moment().format('YYYY-MM-DD HH:mm:ss')} `
			: ''
	}
	info(message) {
		const msg = `${this.timer()}[${this.moduleName}] [Info] : ${this.formatMessage(message)}`

		if (isDevEnv) {
			return console.log(msg.info)
		}
		else {
			return console.log(msg)
		}
	}
	warn(message) {
		const msg = `${this.timer()}[${this.moduleName}] [Warn] : ${this.formatMessage(message)}`

		if (isDevEnv) {
			return console.log(msg.warn)
		}
		else {
			return console.log(msg)
		}
	}
	debug(message) {
		const msg = `${this.timer()}[${this.moduleName}] [Debug] : ${this.formatMessage(message)}`

		if (isDevEnv) {
			return console.log(msg.debug)
		}
		else {
			return console.log(msg)
		}
	}
	error(message) {
		const msg = `${this.timer()}[${this.moduleName}] [Error] : ${this.formatMessage(message)}`

		if (isDevEnv) {
			return console.log(msg.error)
		}
		else {
			return console.log(msg)
		}
	}
	fatal(message) {
		const msg = `${this.timer()}[${this.moduleName}] [Fatal] : ${this.formatMessage(message)}`

		if (isDevEnv) {
			return console.log(msg.fatal)
		}
		else {
			return console.log(msg)
		}
	}

}

module.exports = new logger({
	module : 'MES'
})